<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Voya Media: MovieInfo.cs Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">Voya Media
   &#160;<span id="projectnumber">1.2.255.1212</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.8.0 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('a00021.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">MovieInfo.cs</div>  </div>
</div><!--header-->
<div class="contents">
<a href="a00021.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 ﻿using System;
<a name="l00002"></a>00002 <span class="keyword">using</span> System.Collections.Generic;
<a name="l00003"></a>00003 <span class="keyword">using</span> System.Diagnostics;
<a name="l00004"></a>00004 <span class="keyword">using</span> System.IO;
<a name="l00005"></a>00005 <span class="keyword">using</span> System.Linq;
<a name="l00006"></a>00006 <span class="keyword">using</span> System.Net;
<a name="l00007"></a>00007 <span class="keyword">using</span> System.Reflection;
<a name="l00008"></a>00008 <span class="keyword">using</span> System.Resources;
<a name="l00009"></a>00009 <span class="keyword">using</span> System.Text;
<a name="l00010"></a>00010 <span class="keyword">using</span> System.Text.RegularExpressions;
<a name="l00011"></a>00011 <span class="keyword">using</span> System.Xml;
<a name="l00012"></a>00012 <span class="keyword">using</span> FileSystem;
<a name="l00013"></a>00013 <span class="keyword">using</span> Network;
<a name="l00014"></a>00014 
<a name="l00015"></a>00015 <span class="keyword">namespace </span>MediaInfoApi
<a name="l00016"></a>00016 {
<a name="l00017"></a>00017     <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class </span>MovieInfo
<a name="l00018"></a>00018     {
<a name="l00019"></a>00019         <span class="comment">// Private class member properties.</span>
<a name="l00020"></a>00020         <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">string</span>          apiKey          = <span class="stringliteral">@&quot;14f69dec4b96134333164bb686904504&quot;</span>;
<a name="l00021"></a>00021         <span class="keyword">private</span> <span class="keyword">static</span> ResourceManager resourceManager = <span class="keyword">new</span> ResourceManager(<span class="stringliteral">&quot;MediaInfoApi.Properties.Resources&quot;</span>, Assembly.GetExecutingAssembly());
<a name="l00022"></a>00022 
<a name="l00028"></a>00028         <span class="keyword">public</span> <span class="keyword">static</span> List&lt;string&gt; GetAlternativeMovieMatches(<span class="keywordtype">string</span> searchString)
<a name="l00029"></a>00029         {
<a name="l00030"></a>00030             <span class="comment">// Main variables.</span>
<a name="l00031"></a>00031             List&lt;string&gt; matches                = <span class="keyword">new</span> List&lt;string&gt;() { };
<a name="l00032"></a>00032             <span class="keywordtype">bool</span>         matchFound             = <span class="keyword">false</span>;
<a name="l00033"></a>00033             <span class="keywordtype">string</span>[]     searchArray            = <span class="keyword">new</span> <span class="keywordtype">string</span>[] { };
<a name="l00034"></a>00034             <span class="keywordtype">string</span>       searchResults          = <span class="stringliteral">@&quot;0&quot;</span>;
<a name="l00035"></a>00035             <span class="keywordtype">string</span>       httpResponseDataString = <span class="stringliteral">@&quot;&quot;</span>;
<a name="l00036"></a>00036 
<a name="l00037"></a>00037             <span class="comment">// Split the search string word by word.</span>
<a name="l00038"></a>00038             <span class="comment">// Example: &quot;Back to the Future&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;.</span>
<a name="l00039"></a>00039             searchArray = searchString.Split(<span class="charliteral">&#39; &#39;</span>);
<a name="l00040"></a>00040 
<a name="l00041"></a>00041             <span class="comment">// We will search for movies in the following way:</span>
<a name="l00042"></a>00042             <span class="comment">// Search String: &quot;Back to the Future CD1 XVID&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;, arr[4]=&quot;CD1&quot;, arr[5]=&quot;XVID&quot;.</span>
<a name="l00043"></a>00043             <span class="comment">// Search 1: &quot;Back to the Future CD1 XVID&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;, arr[4]=&quot;CD1&quot;, arr[5]=&quot;XVID&quot;.</span>
<a name="l00044"></a>00044             <span class="comment">// Search 2: &quot;Back to the Future CD1&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;, arr[4]=&quot;CD1&quot;.</span>
<a name="l00045"></a>00045             <span class="comment">// Search 3: &quot;Back to the Future&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;.</span>
<a name="l00046"></a>00046             <span class="comment">// Search 4: &quot;Back to the&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;.</span>
<a name="l00047"></a>00047             <span class="comment">// Search 5: &quot;Back to&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;.</span>
<a name="l00048"></a>00048             <span class="comment">// Search 6: &quot;Back&quot; =&gt; arr[0]=&quot;Back&quot;.</span>
<a name="l00049"></a>00049             <span class="keywordflow">for</span> (<span class="keywordtype">int</span> loopCounter = (searchArray.Length - 1); loopCounter &gt;= 0; loopCounter--)
<a name="l00050"></a>00050             {
<a name="l00051"></a>00051                 <span class="comment">// Search only as long as we haven&#39;t yet found a match.</span>
<a name="l00052"></a>00052                 <span class="comment">// In the above exmples we need max 6 searches, </span>
<a name="l00053"></a>00053                 <span class="comment">// but since we have a match on the 3rd search we only need 3 searches.</span>
<a name="l00054"></a>00054                 <span class="keywordflow">if</span> (!matchFound)
<a name="l00055"></a>00055                 {
<a name="l00056"></a>00056                     <span class="comment">// Main variables.</span>
<a name="l00057"></a>00057                     <span class="keywordtype">int</span>    substringLength = 0;
<a name="l00058"></a>00058                     <span class="keywordtype">string</span> searchSubstring = <span class="stringliteral">@&quot;&quot;</span>;
<a name="l00059"></a>00059 
<a name="l00060"></a>00060                     <span class="comment">// Set the correct substring length of the search string based on which iteration of the loop we are currently in.</span>
<a name="l00061"></a>00061                     <span class="keywordflow">if</span> (loopCounter == (searchArray.Length - 1))
<a name="l00062"></a>00062                     {
<a name="l00063"></a>00063                         substringLength = searchString.Length;
<a name="l00064"></a>00064                     }
<a name="l00065"></a>00065                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (loopCounter == 0)
<a name="l00066"></a>00066                     {
<a name="l00067"></a>00067                         substringLength = searchArray[0].Length;
<a name="l00068"></a>00068                     }
<a name="l00069"></a>00069                     <span class="keywordflow">else</span>
<a name="l00070"></a>00070                     {
<a name="l00071"></a>00071                         substringLength = searchString.LastIndexOf(searchArray[loopCounter + 1]);
<a name="l00072"></a>00072                     }
<a name="l00073"></a>00073 
<a name="l00074"></a>00074                     <span class="comment">// Set the correct search string.</span>
<a name="l00075"></a>00075                     searchSubstring = searchString.Substring(0, substringLength);
<a name="l00076"></a>00076 
<a name="l00077"></a>00077                     <span class="keywordflow">try</span>
<a name="l00078"></a>00078                     {
<a name="l00079"></a>00079                         <span class="keywordflow">if</span> (!String.IsNullOrEmpty(searchSubstring))
<a name="l00080"></a>00080                         {
<a name="l00081"></a>00081                             <span class="comment">// Send an HTTP web request to TheMovieDB.org to search for the specified movie.</span>
<a name="l00082"></a>00082                             httpResponseDataString = Network.DataCommunication.GetHttpWebRequestResponse(<span class="stringliteral">@&quot;http://api.themoviedb.org/2.1/Movie.search/en/xml/&quot;</span> + MovieInfo.apiKey + <span class="stringliteral">@&quot;/&quot;</span> + searchSubstring + <span class="stringliteral">@&quot;&quot;</span>);
<a name="l00083"></a>00083                         }
<a name="l00084"></a>00084                     }
<a name="l00085"></a>00085                     <span class="keywordflow">catch</span> (Exception exception)
<a name="l00086"></a>00086                     {
<a name="l00087"></a>00087                         EventLog.WriteEntry(resourceManager.GetString(<span class="stringliteral">&quot;application_title&quot;</span>),
<a name="l00088"></a>00088                             <span class="stringliteral">@&quot;</span>
<a name="l00089"></a>00089 <span class="stringliteral">                            Class:  MovieInfo</span>
<a name="l00090"></a>00090 <span class="stringliteral">                            Method: GetMovieRawData(&quot;&quot;&quot;</span> + searchString + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00091"></a>00091 <span class="stringliteral">                            Action: DataCommunication.GetHttpWebRequestResponse(&quot;&quot;http://api.themoviedb.org/2.1/Movie.search/en/xml/MovieInfo.apiKey/&quot;</span> + searchSubstring + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00092"></a>00092 <span class="stringliteral">                            httpResponseDataString: &quot;</span> + httpResponseDataString + <span class="stringliteral">@&quot;</span>
<a name="l00093"></a>00093 <span class="stringliteral">                            </span>
<a name="l00094"></a>00094 <span class="stringliteral">                            &quot;</span> + exception.Message
<a name="l00095"></a>00095                             , EventLogEntryType.Error, 123);
<a name="l00096"></a>00096                     }
<a name="l00097"></a>00097 
<a name="l00098"></a>00098                     <span class="comment">// Extract from the result how many movies the search query returned.</span>
<a name="l00099"></a>00099                     <span class="keywordflow">if</span> (!String.IsNullOrEmpty(httpResponseDataString))
<a name="l00100"></a>00100                     {
<a name="l00101"></a>00101                         <span class="keywordtype">string</span> searchResultsPattern = <span class="stringliteral">@&quot;&lt;opensearch:totalResults&gt;(?&lt;searchResults&gt;.+)&lt;/opensearch:totalResults&gt;&quot;</span>;
<a name="l00102"></a>00102                         Match  searchResultsMatch   = Regex.Match(httpResponseDataString, searchResultsPattern);
<a name="l00103"></a>00103                         searchResults               = Regex.Replace(searchResultsMatch.ToString(), searchResultsPattern, <span class="stringliteral">&quot;${searchResults}&quot;</span>);
<a name="l00104"></a>00104                     }
<a name="l00105"></a>00105 
<a name="l00106"></a>00106                     <span class="comment">// Let the iterative loop know that we have found at least one match so we can break out of the loop.</span>
<a name="l00107"></a>00107                     <span class="keywordflow">if</span> (!String.IsNullOrEmpty(searchResults) &amp;&amp; (searchResults != <span class="stringliteral">@&quot;0&quot;</span>))
<a name="l00108"></a>00108                     {
<a name="l00109"></a>00109                         matchFound = <span class="keyword">true</span>;
<a name="l00110"></a>00110                         
<a name="l00111"></a>00111                             <span class="comment">// Load in the contents of the Manifest XML file.</span>
<a name="l00112"></a>00112                             System.Xml.XmlDocument manifestXml = <span class="keyword">new</span> System.Xml.XmlDocument();
<a name="l00113"></a>00113                             manifestXml.LoadXml(httpResponseDataString);
<a name="l00114"></a>00114 
<a name="l00115"></a>00115                             <span class="comment">// Add a &lt;OpenSearchDescription&gt; Node-Alias for the &lt;OpenSearchDescription xmlns:opensearch=&quot;http://a9.com/-/spec/opensearch/1.1/&quot;&gt; node so the XPATH parsing works.</span>
<a name="l00116"></a>00116                             System.Xml.XmlNamespaceManager xmlNameSpaceManager = <span class="keyword">new</span> System.Xml.XmlNamespaceManager(manifestXml.NameTable);
<a name="l00117"></a>00117                             xmlNameSpaceManager.AddNamespace(<span class="stringliteral">&quot;root&quot;</span>, manifestXml.NamespaceURI);
<a name="l00118"></a>00118         
<a name="l00119"></a>00119                             <span class="comment">// Get a collection/list of all the &lt;movies&gt; children nodes in &lt;root&gt;.</span>
<a name="l00120"></a>00120                         XmlNodeList rootNodes = manifestXml.SelectNodes(<span class="stringliteral">&quot;//root:movies&quot;</span>, xmlNameSpaceManager);
<a name="l00121"></a>00121                             
<a name="l00122"></a>00122                             <span class="comment">// Parse each child node.</span>
<a name="l00123"></a>00123                         <span class="keywordflow">foreach</span> (XmlNode movieNodes <span class="keywordflow">in</span> rootNodes) 
<a name="l00124"></a>00124                         {
<a name="l00125"></a>00125                             <span class="keywordflow">foreach</span> (XmlNode movieNode <span class="keywordflow">in</span> movieNodes.ChildNodes)
<a name="l00126"></a>00126                             {
<a name="l00127"></a>00127                                 <span class="comment">// Initialize a blank movie title.</span>
<a name="l00128"></a>00128                                 <span class="keywordtype">string</span> movieTitle = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00129"></a>00129 
<a name="l00130"></a>00130                                 <span class="comment">// Extract the movie name and release date and add them to the movie title.</span>
<a name="l00131"></a>00131                                 <span class="keywordflow">foreach</span> (XmlNode moviePropertyNode <span class="keywordflow">in</span> movieNode.ChildNodes)
<a name="l00132"></a>00132                                 {
<a name="l00133"></a>00133                                     <span class="keywordflow">if</span> (moviePropertyNode.Name == <span class="stringliteral">@&quot;original_name&quot;</span>)
<a name="l00134"></a>00134                                     {
<a name="l00135"></a>00135                                         movieTitle += moviePropertyNode.InnerText;
<a name="l00136"></a>00136                                     }
<a name="l00137"></a>00137                                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (moviePropertyNode.Name == <span class="stringliteral">@&quot;name&quot;</span>)
<a name="l00138"></a>00138                                     {
<a name="l00139"></a>00139                                         <span class="keywordflow">if</span> (moviePropertyNode.InnerText != movieTitle)
<a name="l00140"></a>00140                                         {
<a name="l00141"></a>00141                                             movieTitle += <span class="stringliteral">@&quot; (&quot;</span> + moviePropertyNode.InnerText + <span class="stringliteral">@&quot;)&quot;</span>;
<a name="l00142"></a>00142                                         }
<a name="l00143"></a>00143                                     }
<a name="l00144"></a>00144                                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((moviePropertyNode.Name == <span class="stringliteral">@&quot;released&quot;</span>) &amp;&amp; (moviePropertyNode.InnerText.Length &gt;= 4))
<a name="l00145"></a>00145                                     {
<a name="l00146"></a>00146                                         movieTitle += <span class="stringliteral">@&quot; (&quot;</span> + moviePropertyNode.InnerText.Substring(0, 4) + <span class="stringliteral">@&quot;)&quot;</span>;
<a name="l00147"></a>00147                                     }
<a name="l00148"></a>00148                                 }
<a name="l00149"></a>00149 
<a name="l00150"></a>00150                                 <span class="comment">// Add the complete movie title string to the movie list.</span>
<a name="l00151"></a>00151                                 matches.Add(movieTitle);
<a name="l00152"></a>00152                             }
<a name="l00153"></a>00153                             }
<a name="l00154"></a>00154                     }
<a name="l00155"></a>00155                     <span class="keywordflow">else</span>
<a name="l00156"></a>00156                     {
<a name="l00157"></a>00157                         httpResponseDataString = <span class="stringliteral">@&quot;&quot;</span>;
<a name="l00158"></a>00158                         matchFound             = <span class="keyword">false</span>;
<a name="l00159"></a>00159                     }
<a name="l00160"></a>00160                 }
<a name="l00161"></a>00161             }
<a name="l00162"></a>00162 
<a name="l00163"></a>00163             <span class="comment">// Return a list of matching movies.</span>
<a name="l00164"></a>00164             <span class="keywordflow">return</span> matches;
<a name="l00165"></a>00165         }
<a name="l00166"></a>00166 
<a name="l00172"></a>00172         <span class="keyword">private</span> <span class="keyword">static</span> Dictionary&lt;string, string&gt; GetMovieDetailsInternal(<span class="keywordtype">string</span> movieRawData)
<a name="l00173"></a>00173         {
<a name="l00174"></a>00174             <span class="comment">// A dictionary to contain all the movie details to return.</span>
<a name="l00175"></a>00175             Dictionary&lt;string, string&gt; movieDetails = <span class="keyword">new</span> Dictionary&lt;string, string&gt;() { };
<a name="l00176"></a>00176 
<a name="l00177"></a>00177             <span class="comment">// Initialize dictionary values to blank strings.</span>
<a name="l00178"></a>00178             movieDetails[<span class="stringliteral">&quot;backdrop&quot;</span>] = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00179"></a>00179             movieDetails[<span class="stringliteral">&quot;cast&quot;</span>]     = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00180"></a>00180             movieDetails[<span class="stringliteral">&quot;cover&quot;</span>]    = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00181"></a>00181             movieDetails[<span class="stringliteral">&quot;id&quot;</span>]       = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00182"></a>00182             movieDetails[<span class="stringliteral">&quot;director&quot;</span>] = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00183"></a>00183             movieDetails[<span class="stringliteral">&quot;genre&quot;</span>]    = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00184"></a>00184             movieDetails[<span class="stringliteral">&quot;name&quot;</span>]     = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00185"></a>00185             movieDetails[<span class="stringliteral">&quot;released&quot;</span>] = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00186"></a>00186             movieDetails[<span class="stringliteral">&quot;summary&quot;</span>]  = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00187"></a>00187             movieDetails[<span class="stringliteral">&quot;trailer&quot;</span>]  = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00188"></a>00188             movieDetails[<span class="stringliteral">&quot;writers&quot;</span>]  = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00189"></a>00189             
<a name="l00190"></a>00190             <span class="comment">// Movie ID in TheMovieDB.org.</span>
<a name="l00191"></a>00191             <span class="keywordtype">string</span> movieIdPattern = <span class="stringliteral">@&quot;&lt;id&gt;(?&lt;movieId&gt;.+)&lt;/id&gt;&quot;</span>;
<a name="l00192"></a>00192             Match  movieIdMatch   = Regex.Match(movieRawData, movieIdPattern);
<a name="l00193"></a>00193             movieDetails[<span class="stringliteral">&quot;id&quot;</span>]    = Regex.Replace(movieIdMatch.ToString(), movieIdPattern, <span class="stringliteral">&quot;${movieId}&quot;</span>);
<a name="l00194"></a>00194             
<a name="l00195"></a>00195             <span class="comment">// Movie Name.</span>
<a name="l00196"></a>00196             <span class="keywordtype">string</span> movieNamePattern            = <span class="stringliteral">@&quot;&lt;original_name&gt;(?&lt;movieName&gt;.+)&lt;/original_name&gt;&quot;</span>;
<a name="l00197"></a>00197             Match  movieNameMatch              = Regex.Match(movieRawData, movieNamePattern);
<a name="l00198"></a>00198             <span class="keywordtype">string</span> movieAlternativeNamePattern = <span class="stringliteral">@&quot;&lt;name&gt;(?&lt;movieAlternativeName&gt;.+)&lt;/name&gt;&quot;</span>;
<a name="l00199"></a>00199             Match  movieAlternativeNameMatch   = Regex.Match(movieRawData, movieAlternativeNamePattern);
<a name="l00200"></a>00200             <span class="keywordtype">string</span> movieName                   = Regex.Replace(movieNameMatch.ToString(), movieNamePattern, <span class="stringliteral">&quot;${movieName}&quot;</span>);
<a name="l00201"></a>00201             <span class="keywordtype">string</span> movieAlternativeName        = Regex.Replace(movieAlternativeNameMatch.ToString(), movieAlternativeNamePattern, <span class="stringliteral">&quot;${movieAlternativeName}&quot;</span>);
<a name="l00202"></a>00202             movieDetails[<span class="stringliteral">&quot;name&quot;</span>]               = movieName;
<a name="l00203"></a>00203 
<a name="l00204"></a>00204             <span class="comment">// Add an alternative movie name for foreign language titles.</span>
<a name="l00205"></a>00205             <span class="keywordflow">if</span> (!String.IsNullOrEmpty(movieAlternativeName) &amp;&amp; (movieName != movieAlternativeName))
<a name="l00206"></a>00206             {
<a name="l00207"></a>00207                 movieDetails[<span class="stringliteral">&quot;name&quot;</span>] += <span class="stringliteral">@&quot; (&quot;</span> + movieAlternativeName + <span class="stringliteral">@&quot;)&quot;</span>;
<a name="l00208"></a>00208             }
<a name="l00209"></a>00209             
<a name="l00210"></a>00210             <span class="comment">// Movie Release Date.</span>
<a name="l00211"></a>00211             <span class="keywordtype">string</span> movieReleasedPattern = <span class="stringliteral">@&quot;&lt;released&gt;(?&lt;movieReleased&gt;.+)&lt;/released&gt;&quot;</span>;
<a name="l00212"></a>00212             Match  movieReleasedMatch   = Regex.Match(movieRawData, movieReleasedPattern);
<a name="l00213"></a>00213             movieDetails[<span class="stringliteral">&quot;released&quot;</span>]    = Regex.Replace(movieReleasedMatch.ToString(), movieReleasedPattern, <span class="stringliteral">&quot;${movieReleased}&quot;</span>);
<a name="l00214"></a>00214 
<a name="l00215"></a>00215             <span class="comment">// Movie Summary.</span>
<a name="l00216"></a>00216             <span class="keywordtype">string</span> movieSummaryPattern = <span class="stringliteral">@&quot;&lt;overview&gt;(?&lt;movieSummary&gt;.+)&lt;/overview&gt;&quot;</span>;
<a name="l00217"></a>00217             Match  movieSummaryMatch   = Regex.Match(movieRawData, movieSummaryPattern);
<a name="l00218"></a>00218             movieDetails[<span class="stringliteral">&quot;summary&quot;</span>]    = Regex.Replace(movieSummaryMatch.ToString(), movieSummaryPattern, <span class="stringliteral">&quot;${movieSummary}&quot;</span>);
<a name="l00219"></a>00219 
<a name="l00220"></a>00220             <span class="comment">// Movie Image Cover.</span>
<a name="l00221"></a>00221             <span class="keywordtype">string</span> movieCoverPattern = <span class="stringliteral">@&quot;&lt;image type=&quot;&quot;poster&quot;&quot; url=&quot;&quot;(?&lt;movieCover&gt;.+)&quot;&quot; size=&quot;&quot;w342&quot;&quot; width=&quot;&quot;342&quot;&quot; height=&quot;&quot;(\d+)&quot;&quot; id=&quot;&quot;(.+)&quot;&quot;/&gt;&quot;</span>;
<a name="l00222"></a>00222             Match  movieCoverMatch   = Regex.Match(movieRawData, movieCoverPattern);
<a name="l00223"></a>00223 
<a name="l00224"></a>00224             <span class="comment">// If no official movie cover was found, get a screenshot image.</span>
<a name="l00225"></a>00225             <span class="keywordflow">if</span> (movieCoverMatch.Length &lt; 1)
<a name="l00226"></a>00226             {
<a name="l00227"></a>00227                 movieCoverPattern = <span class="stringliteral">@&quot;&lt;image type=&quot;&quot;backdrop&quot;&quot; url=&quot;&quot;(?&lt;movieCover&gt;.+)&quot;&quot; size=&quot;&quot;thumb&quot;&quot; width=&quot;&quot;(\d+)&quot;&quot; height=&quot;&quot;(\d+)&quot;&quot; id=&quot;&quot;(.+)&quot;&quot;/&gt;&quot;</span>;
<a name="l00228"></a>00228                 movieCoverMatch   = Regex.Match(movieRawData, movieCoverPattern);
<a name="l00229"></a>00229             }
<a name="l00230"></a>00230 
<a name="l00231"></a>00231             <span class="keywordtype">string</span> movieCoverUrl  = Regex.Replace(movieCoverMatch.ToString(), movieCoverPattern, <span class="stringliteral">&quot;${movieCover}&quot;</span>);
<a name="l00232"></a>00232             <span class="keywordtype">string</span> movieCoverFile = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00233"></a>00233 
<a name="l00234"></a>00234             <span class="keywordflow">if</span> (!String.IsNullOrEmpty(movieCoverUrl))
<a name="l00235"></a>00235             {
<a name="l00236"></a>00236                 movieCoverFile = <a class="code" href="a00002.html" title="Custom methods for Directory Operations.">DirectoryManagement</a>.<a class="code" href="a00002.html#aa8a5138729250fc00ca5b9906ce3bfae" title="Returns the path from where current code is called from after it has been compiled and deployed...">GetRuntimeExecutingPath</a>() + <span class="stringliteral">@&quot;\images\Covers\&quot;</span> + movieCoverUrl.Substring(movieCoverUrl.LastIndexOf(<span class="stringliteral">@&quot;/&quot;</span>) + 1);
<a name="l00237"></a>00237             }
<a name="l00238"></a>00238 
<a name="l00239"></a>00239             <span class="keywordflow">try</span>
<a name="l00240"></a>00240             {
<a name="l00241"></a>00241                 <span class="comment">// Download the cover image to the local filesystem.</span>
<a name="l00242"></a>00242                 <span class="keywordflow">if</span> (!String.IsNullOrEmpty(movieCoverUrl) &amp;&amp; !File.Exists(movieCoverFile))
<a name="l00243"></a>00243                 {
<a name="l00244"></a>00244                     WebClient webClient = <span class="keyword">new</span> WebClient();
<a name="l00245"></a>00245                     webClient.DownloadFile(movieCoverUrl, movieCoverFile);
<a name="l00246"></a>00246                 }
<a name="l00247"></a>00247             }
<a name="l00248"></a>00248             <span class="keywordflow">catch</span> (Exception exception)
<a name="l00249"></a>00249             {
<a name="l00250"></a>00250                 EventLog.WriteEntry(resourceManager.GetString(<span class="stringliteral">&quot;application_title&quot;</span>),
<a name="l00251"></a>00251                     <span class="stringliteral">@&quot;</span>
<a name="l00252"></a>00252 <span class="stringliteral">                        Class:  MovieInfo</span>
<a name="l00253"></a>00253 <span class="stringliteral">                        Method: GetMovieDetailsInternal(string movieRawData)</span>
<a name="l00254"></a>00254 <span class="stringliteral">                        Action: webClient.DownloadFile(&quot;&quot;&quot;</span> + movieCoverUrl + <span class="stringliteral">@&quot;&quot;&quot;, &quot;&quot;&quot;</span> + movieCoverFile + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00255"></a>00255 <span class="stringliteral">                        </span>
<a name="l00256"></a>00256 <span class="stringliteral">                        &quot;</span> + exception.Message
<a name="l00257"></a>00257                     , EventLogEntryType.Error, 123);
<a name="l00258"></a>00258             }
<a name="l00259"></a>00259 
<a name="l00260"></a>00260             <span class="comment">// Save the cover path.</span>
<a name="l00261"></a>00261             <span class="keywordflow">if</span> (File.Exists(movieCoverFile))
<a name="l00262"></a>00262             {
<a name="l00263"></a>00263                 movieDetails[<span class="stringliteral">&quot;cover&quot;</span>] = movieCoverFile;
<a name="l00264"></a>00264             }
<a name="l00265"></a>00265             <span class="keywordflow">else</span>
<a name="l00266"></a>00266             {
<a name="l00267"></a>00267                 movieDetails[<span class="stringliteral">&quot;cover&quot;</span>] = movieCoverUrl;
<a name="l00268"></a>00268             }
<a name="l00269"></a>00269             
<a name="l00270"></a>00270             <span class="comment">// Movie Backdrop.</span>
<a name="l00271"></a>00271             <span class="keywordtype">string</span> movieBackdropPattern = <span class="stringliteral">@&quot;&lt;image type=&quot;&quot;backdrop&quot;&quot; url=&quot;&quot;(?&lt;movieBackdrop&gt;.+)&quot;&quot; size=&quot;&quot;original&quot;&quot; width=&quot;&quot;(\d+)&quot;&quot; height=&quot;&quot;(\d+)&quot;&quot; id=&quot;&quot;(.+)&quot;&quot;/&gt;&quot;</span>;
<a name="l00272"></a>00272             Match movieBackdropMatch    = Regex.Match(movieRawData, movieBackdropPattern);
<a name="l00273"></a>00273             <span class="keywordtype">string</span> movieBackdropUrl     = Regex.Replace(movieBackdropMatch.ToString(), movieBackdropPattern, <span class="stringliteral">&quot;${movieBackdrop}&quot;</span>);
<a name="l00274"></a>00274             <span class="keywordtype">string</span> movieBackdropFile    = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00275"></a>00275 
<a name="l00276"></a>00276             <span class="keywordflow">if</span> (!String.IsNullOrEmpty(movieBackdropUrl))
<a name="l00277"></a>00277             {
<a name="l00278"></a>00278                 movieBackdropFile = <a class="code" href="a00002.html" title="Custom methods for Directory Operations.">DirectoryManagement</a>.<a class="code" href="a00002.html#aa8a5138729250fc00ca5b9906ce3bfae" title="Returns the path from where current code is called from after it has been compiled and deployed...">GetRuntimeExecutingPath</a>() + <span class="stringliteral">@&quot;\images\Backdrops\&quot;</span> + movieBackdropUrl.Substring(movieBackdropUrl.LastIndexOf(<span class="stringliteral">@&quot;/&quot;</span>) + 1);
<a name="l00279"></a>00279             }
<a name="l00280"></a>00280 
<a name="l00281"></a>00281             <span class="keywordflow">try</span>
<a name="l00282"></a>00282             {
<a name="l00283"></a>00283                 <span class="comment">// Download the backdrop image to the local filesystem.</span>
<a name="l00284"></a>00284                 <span class="keywordflow">if</span> (!String.IsNullOrEmpty(movieBackdropUrl) &amp;&amp; !File.Exists(movieBackdropFile))
<a name="l00285"></a>00285                 {
<a name="l00286"></a>00286                     WebClient webClient = <span class="keyword">new</span> WebClient();
<a name="l00287"></a>00287                     webClient.DownloadFile(movieBackdropUrl, movieBackdropFile);
<a name="l00288"></a>00288                 }
<a name="l00289"></a>00289             }
<a name="l00290"></a>00290             <span class="keywordflow">catch</span> (Exception exception)
<a name="l00291"></a>00291             {
<a name="l00292"></a>00292                 EventLog.WriteEntry(resourceManager.GetString(<span class="stringliteral">&quot;application_title&quot;</span>),
<a name="l00293"></a>00293                     <span class="stringliteral">@&quot;</span>
<a name="l00294"></a>00294 <span class="stringliteral">                        Class:  MovieInfo</span>
<a name="l00295"></a>00295 <span class="stringliteral">                        Method: GetMovieDetailsInternal(string movieRawData)</span>
<a name="l00296"></a>00296 <span class="stringliteral">                        Action: webClient.DownloadFile(&quot;&quot;&quot;</span> + movieBackdropUrl + <span class="stringliteral">@&quot;&quot;&quot;, &quot;&quot;&quot;</span> + movieBackdropFile + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00297"></a>00297 <span class="stringliteral">                        </span>
<a name="l00298"></a>00298 <span class="stringliteral">                        &quot;</span> + exception.Message
<a name="l00299"></a>00299                     , EventLogEntryType.Error, 123);
<a name="l00300"></a>00300             }
<a name="l00301"></a>00301 
<a name="l00302"></a>00302             <span class="comment">// Save the backdrop path.</span>
<a name="l00303"></a>00303             <span class="keywordflow">if</span> (File.Exists(movieBackdropFile))
<a name="l00304"></a>00304             {
<a name="l00305"></a>00305                 movieDetails[<span class="stringliteral">&quot;backdrop&quot;</span>] = movieBackdropFile;
<a name="l00306"></a>00306             }
<a name="l00307"></a>00307             <span class="keywordflow">else</span>
<a name="l00308"></a>00308             {
<a name="l00309"></a>00309                 movieDetails[<span class="stringliteral">&quot;backdrop&quot;</span>] = movieBackdropUrl;
<a name="l00310"></a>00310             }
<a name="l00311"></a>00311 
<a name="l00312"></a>00312             <span class="comment">// Query TMDb.org and return the full movie details page.</span>
<a name="l00313"></a>00313             <span class="keywordtype">string</span> movieDetailsRawData = Network.DataCommunication.GetHttpWebRequestResponse(<span class="stringliteral">@&quot;http://api.themoviedb.org/2.1/Movie.getInfo/en/xml/&quot;</span> + MovieInfo.apiKey + <span class="stringliteral">@&quot;/&quot;</span> + movieDetails[<span class="stringliteral">&quot;id&quot;</span>] + <span class="stringliteral">@&quot;&quot;</span>);
<a name="l00314"></a>00314 
<a name="l00315"></a>00315             <span class="comment">// Get the Movie Director.</span>
<a name="l00316"></a>00316             <span class="keywordtype">string</span> movieDirectorPattern  = <span class="stringliteral">@&quot;&lt;person name=&quot;&quot;(?&lt;movieDirector&gt;.+)&quot;&quot; character=&quot;&quot;(.*)&quot;&quot; job=&quot;&quot;Director&quot;&quot; id=&quot;&quot;(\d+)&quot;&quot; thumb=&quot;&quot;(.*)&quot;&quot; department=&quot;&quot;Directing&quot;&quot; url=&quot;&quot;(.*)&quot;&quot; order=&quot;&quot;(\d+)&quot;&quot; cast_id=&quot;&quot;(\d+)&quot;&quot;/&gt;&quot;</span>;
<a name="l00317"></a>00317             Match  movieDirectorMatch    = Regex.Match(movieDetailsRawData, movieDirectorPattern);
<a name="l00318"></a>00318             movieDetails[<span class="stringliteral">&quot;director&quot;</span>]     = Regex.Replace(movieDirectorMatch.ToString(), movieDirectorPattern, <span class="stringliteral">&quot;${movieDirector}&quot;</span>);
<a name="l00319"></a>00319 
<a name="l00320"></a>00320             <span class="comment">// Get the Movie Writers.</span>
<a name="l00321"></a>00321             <span class="keywordtype">string</span>          movieWritersPattern = <span class="stringliteral">@&quot;&lt;person name=&quot;&quot;(?&lt;movieWriters&gt;.+)&quot;&quot; character=&quot;&quot;(.*)&quot;&quot; job=&quot;&quot;(.*)&quot;&quot; id=&quot;&quot;(\d+)&quot;&quot; thumb=&quot;&quot;(.*)&quot;&quot; department=&quot;&quot;Writing&quot;&quot; url=&quot;&quot;(.*)&quot;&quot; order=&quot;&quot;(\d+)&quot;&quot; cast_id=&quot;&quot;(\d+)&quot;&quot;/&gt;&quot;</span>;
<a name="l00322"></a>00322             MatchCollection movieWritersMatches = Regex.Matches(movieDetailsRawData, movieWritersPattern);
<a name="l00323"></a>00323             <span class="keywordtype">string</span>          movieWriters        = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00324"></a>00324 
<a name="l00325"></a>00325             <span class="comment">// Seperate each writer by a comma character.</span>
<a name="l00326"></a>00326             <span class="keywordflow">foreach</span> (Match movieWritersMatch <span class="keywordflow">in</span> movieWritersMatches)
<a name="l00327"></a>00327             {
<a name="l00328"></a>00328                 <span class="keywordtype">string</span> matchString = Regex.Replace(movieWritersMatch.ToString(), movieWritersPattern, <span class="stringliteral">&quot;${movieWriters}&quot;</span>);
<a name="l00329"></a>00329 
<a name="l00330"></a>00330                 <span class="keywordflow">if</span> (!movieWriters.Contains(matchString))
<a name="l00331"></a>00331                 {
<a name="l00332"></a>00332                     movieWriters += matchString  + <span class="stringliteral">@&quot;, &quot;</span>;
<a name="l00333"></a>00333                 }
<a name="l00334"></a>00334             }
<a name="l00335"></a>00335 
<a name="l00336"></a>00336             <span class="comment">// Strip away the last comma seperator.</span>
<a name="l00337"></a>00337             movieDetails[<span class="stringliteral">&quot;writers&quot;</span>] = movieWriters.Trim().TrimEnd(<span class="charliteral">&#39;,&#39;</span>);
<a name="l00338"></a>00338 
<a name="l00339"></a>00339             <span class="comment">// Get the Movie Genre.</span>
<a name="l00340"></a>00340             <span class="keywordtype">string</span>          movieGenrePattern = <span class="stringliteral">@&quot;&lt;category type=&quot;&quot;genre&quot;&quot; name=&quot;&quot;(?&lt;movieGenre&gt;.+)&quot;&quot; url=&quot;&quot;(.*)&quot;&quot; id=&quot;&quot;(\d+)&quot;&quot;/&gt;&quot;</span>;
<a name="l00341"></a>00341             MatchCollection movieGenreMatches = Regex.Matches(movieDetailsRawData, movieGenrePattern);
<a name="l00342"></a>00342             <span class="keywordtype">string</span>          movieGenre        = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00343"></a>00343 
<a name="l00344"></a>00344             <span class="comment">// Seperate each writer by a comma character.</span>
<a name="l00345"></a>00345             <span class="keywordflow">foreach</span> (Match movieGenreMatch <span class="keywordflow">in</span> movieGenreMatches)
<a name="l00346"></a>00346             {
<a name="l00347"></a>00347                 <span class="keywordtype">string</span> matchString = Regex.Replace(movieGenreMatch.ToString(), movieGenrePattern, <span class="stringliteral">&quot;${movieGenre}&quot;</span>);
<a name="l00348"></a>00348 
<a name="l00349"></a>00349                 <span class="keywordflow">if</span> (!movieWriters.Contains(matchString))
<a name="l00350"></a>00350                 {
<a name="l00351"></a>00351                     movieGenre += matchString + <span class="stringliteral">@&quot;, &quot;</span>;
<a name="l00352"></a>00352                 }
<a name="l00353"></a>00353             }
<a name="l00354"></a>00354 
<a name="l00355"></a>00355             <span class="comment">// Strip away the last comma seperator.</span>
<a name="l00356"></a>00356             movieDetails[<span class="stringliteral">&quot;genre&quot;</span>] = movieGenre.Trim().TrimEnd(<span class="charliteral">&#39;,&#39;</span>);
<a name="l00357"></a>00357 
<a name="l00358"></a>00358             <span class="comment">// Get the Movie Cast.</span>
<a name="l00359"></a>00359             <span class="keywordtype">string</span>          movieCastPattern = <span class="stringliteral">@&quot;&lt;person name=&quot;&quot;(?&lt;movieCast&gt;.+)&quot;&quot; character=&quot;&quot;(.*)&quot;&quot; job=&quot;&quot;Actor&quot;&quot; id=&quot;&quot;(\d+)&quot;&quot; thumb=&quot;&quot;(.*)&quot;&quot; department=&quot;&quot;Actors&quot;&quot; url=&quot;&quot;(.*)&quot;&quot; order=&quot;&quot;(\d+)&quot;&quot; cast_id=&quot;&quot;(\d+)&quot;&quot;/&gt;&quot;</span>;
<a name="l00360"></a>00360             MatchCollection movieCastMatches = Regex.Matches(movieDetailsRawData, movieCastPattern);
<a name="l00361"></a>00361             <span class="keywordtype">string</span>          movieCast        = <span class="stringliteral">&quot;&quot;</span>;
<a name="l00362"></a>00362 
<a name="l00363"></a>00363             <span class="comment">// Seperate each writer by a comma character.</span>
<a name="l00364"></a>00364             <span class="keywordflow">foreach</span> (Match movieCastMatch <span class="keywordflow">in</span> movieCastMatches)
<a name="l00365"></a>00365             {
<a name="l00366"></a>00366                 <span class="keywordtype">string</span> matchString = Regex.Replace(movieCastMatch.ToString(), movieCastPattern, <span class="stringliteral">&quot;${movieCast}&quot;</span>);
<a name="l00367"></a>00367 
<a name="l00368"></a>00368                 <span class="keywordflow">if</span> (!movieCast.Contains(matchString))
<a name="l00369"></a>00369                 {
<a name="l00370"></a>00370                     movieCast += matchString + <span class="stringliteral">@&quot;, &quot;</span>;
<a name="l00371"></a>00371                 }
<a name="l00372"></a>00372             }
<a name="l00373"></a>00373 
<a name="l00374"></a>00374             <span class="comment">// Strip away the last comma seperator.</span>
<a name="l00375"></a>00375             movieDetails[<span class="stringliteral">&quot;cast&quot;</span>] = movieCast.Trim().TrimEnd(<span class="charliteral">&#39;,&#39;</span>);
<a name="l00376"></a>00376 
<a name="l00377"></a>00377             <span class="comment">// Movie Trailer.</span>
<a name="l00378"></a>00378             <span class="keywordtype">bool</span>   foundTrailer        = <span class="keyword">false</span>;
<a name="l00379"></a>00379             <span class="keywordtype">string</span> movieTrailerPattern = <span class="stringliteral">@&quot;&lt;trailer&gt;(?&lt;movieTrailer&gt;.+)&lt;/trailer&gt;&quot;</span>;
<a name="l00380"></a>00380             Match  movieTrailerMatch   = Regex.Match(movieDetailsRawData, movieTrailerPattern);
<a name="l00381"></a>00381             movieDetails[<span class="stringliteral">&quot;trailer&quot;</span>]    = Regex.Replace(movieTrailerMatch.ToString(), movieTrailerPattern, <span class="stringliteral">&quot;${movieTrailer}&quot;</span>);
<a name="l00382"></a>00382 
<a name="l00383"></a>00383             <span class="comment">// Youtube thumbnail: http://i.ytimg.com/vi/&lt;YOUTUBE_ID&gt;/default.jpg</span>
<a name="l00384"></a>00384 
<a name="l00385"></a>00385             <span class="comment">// Extract Youtube ID from the URL: &quot;http://www.youtube.com/watch?v=A7CBKT0PWFA&quot; -&gt; &quot;A7CBKT0PWFA&quot;</span>
<a name="l00386"></a>00386             <span class="keywordtype">string</span> trailerId = movieDetails[<span class="stringliteral">&quot;trailer&quot;</span>].Replace(<span class="stringliteral">@&quot;http://www.youtube.com/watch?v=&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);
<a name="l00387"></a>00387 
<a name="l00388"></a>00388             <span class="comment">// Get full Youtube Trailer details.</span>
<a name="l00389"></a>00389             <span class="keywordtype">string</span> trailerDetailsRawData = Network.DataCommunication.GetHttpWebRequestResponse(<span class="stringliteral">@&quot;http://www.youtube.com/get_video_info?video_id=&quot;</span> + trailerId + <span class="stringliteral">@&quot;&amp;asv=3&amp;el=detailpage&amp;hl=en_US&quot;</span>);
<a name="l00390"></a>00390 
<a name="l00391"></a>00391             <span class="comment">// Remove a prepending string.</span>
<a name="l00392"></a>00392             trailerDetailsRawData = trailerDetailsRawData.Replace(<span class="stringliteral">@&quot;ttsurl=&quot;</span>, <span class="stringliteral">&quot;&quot;</span>);
<a name="l00393"></a>00393 
<a name="l00394"></a>00394             <span class="comment">// Split the string into the various URLs.</span>
<a name="l00395"></a>00395             <span class="keywordtype">string</span>[] trailerDetailsSplit = Regex.Split(trailerDetailsRawData, <span class="stringliteral">@&quot;http&quot;</span>);
<a name="l00396"></a>00396 
<a name="l00397"></a>00397             <span class="comment">// Parse each splitted string.</span>
<a name="l00398"></a>00398             <span class="keywordflow">foreach</span> (<span class="keywordtype">string</span> splitString <span class="keywordflow">in</span> trailerDetailsSplit)
<a name="l00399"></a>00399             {
<a name="l00400"></a>00400                 <span class="keywordflow">if</span> (!foundTrailer)
<a name="l00401"></a>00401                 {
<a name="l00402"></a>00402                     <span class="keywordtype">string</span> trailerUrl = splitString;
<a name="l00403"></a>00403 
<a name="l00404"></a>00404                     <span class="comment">// Replace %25 with % to get the correct ASCII code, example: %252C -&gt; %2C</span>
<a name="l00405"></a>00405                     trailerUrl = trailerUrl.Replace(<span class="stringliteral">@&quot;%25&quot;</span>, <span class="stringliteral">@&quot;%&quot;</span>);
<a name="l00406"></a>00406 
<a name="l00407"></a>00407                     <span class="comment">// Replace &quot;%3A&quot; with &quot;:&quot;.</span>
<a name="l00408"></a>00408                     trailerUrl = trailerUrl.Replace(<span class="stringliteral">@&quot;%3A&quot;</span>, <span class="stringliteral">@&quot;:&quot;</span>);
<a name="l00409"></a>00409 
<a name="l00410"></a>00410                     <span class="comment">// Replace &quot;%2F&quot; with &quot;/&quot;.</span>
<a name="l00411"></a>00411                     trailerUrl = trailerUrl.Replace(<span class="stringliteral">@&quot;%2F&quot;</span>, <span class="stringliteral">@&quot;/&quot;</span>);
<a name="l00412"></a>00412 
<a name="l00413"></a>00413                     <span class="comment">// Replace &quot;%3F&quot; with &quot;?&quot;.</span>
<a name="l00414"></a>00414                     trailerUrl = trailerUrl.Replace(<span class="stringliteral">@&quot;%3F&quot;</span>, <span class="stringliteral">@&quot;?&quot;</span>);
<a name="l00415"></a>00415 
<a name="l00416"></a>00416                     <span class="comment">// Replace &quot;%3D&quot; with &quot;=&quot;.</span>
<a name="l00417"></a>00417                     trailerUrl = trailerUrl.Replace(<span class="stringliteral">@&quot;%3D&quot;</span>, <span class="stringliteral">@&quot;=&quot;</span>);
<a name="l00418"></a>00418 
<a name="l00419"></a>00419                     <span class="comment">// Replace &quot;%26&quot; with &quot;&amp;&quot;.</span>
<a name="l00420"></a>00420                     trailerUrl = trailerUrl.Replace(<span class="stringliteral">@&quot;%26&quot;</span>, <span class="stringliteral">@&quot;&amp;&quot;</span>);
<a name="l00421"></a>00421 
<a name="l00422"></a>00422                     <span class="comment">// Replace &quot;sig=&quot; with &quot;signature=&quot;.</span>
<a name="l00423"></a>00423                     trailerUrl = trailerUrl.Replace(<span class="stringliteral">@&quot;sig=&quot;</span>, <span class="stringliteral">@&quot;signature=&quot;</span>);
<a name="l00424"></a>00424 
<a name="l00425"></a>00425                     <span class="comment">// Replace &quot;%25&quot; with &quot;%&quot;.</span>
<a name="l00426"></a>00426                     trailerUrl = trailerUrl.Replace(<span class="stringliteral">@&quot;%25&quot;</span>, <span class="stringliteral">@&quot;%&quot;</span>);
<a name="l00427"></a>00427 
<a name="l00428"></a>00428                     <span class="comment">// Append &quot;http&quot; to the trailer URL.</span>
<a name="l00429"></a>00429                     trailerUrl = <span class="stringliteral">@&quot;http&quot;</span> + trailerUrl;
<a name="l00430"></a>00430 
<a name="l00431"></a>00431                     <span class="comment">// Check for valid trailer URLs.</span>
<a name="l00432"></a>00432                     <span class="keywordflow">if</span> (trailerUrl.Contains(<span class="stringliteral">@&quot;r7---sn-&quot;</span>) || trailerUrl.Contains(<span class="stringliteral">@&quot;r1---sn-&quot;</span>) || trailerUrl.Contains(<span class="stringliteral">@&quot;r3---sn-&quot;</span>))
<a name="l00433"></a>00433                     {
<a name="l00434"></a>00434                         foundTrailer = <span class="keyword">true</span>;
<a name="l00435"></a>00435 
<a name="l00436"></a>00436                         movieDetails[<span class="stringliteral">&quot;trailer&quot;</span>] = trailerUrl;
<a name="l00437"></a>00437                     }
<a name="l00438"></a>00438                 }
<a name="l00439"></a>00439             }
<a name="l00440"></a>00440             
<a name="l00441"></a>00441             <span class="comment">// Return the Movie Details.</span>
<a name="l00442"></a>00442             <span class="keywordflow">return</span> movieDetails;
<a name="l00443"></a>00443         }
<a name="l00444"></a>00444         
<a name="l00450"></a>00450         <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">string</span> GetMovieRawData(<span class="keywordtype">string</span> searchString)
<a name="l00451"></a>00451         {
<a name="l00452"></a>00452             <span class="comment">// Main variables.</span>
<a name="l00453"></a>00453             <span class="keywordtype">bool</span>     matchFound             = <span class="keyword">false</span>;
<a name="l00454"></a>00454             <span class="keywordtype">string</span>[] searchArray            = <span class="keyword">new</span> <span class="keywordtype">string</span>[] { };
<a name="l00455"></a>00455             <span class="keywordtype">string</span>   searchResults          = <span class="stringliteral">@&quot;0&quot;</span>;
<a name="l00456"></a>00456             <span class="keywordtype">string</span>   httpResponseDataString = <span class="stringliteral">@&quot;&quot;</span>;
<a name="l00457"></a>00457 
<a name="l00458"></a>00458             <span class="comment">// Split the search string word by word.</span>
<a name="l00459"></a>00459             <span class="comment">// Example: &quot;Back to the Future&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;.</span>
<a name="l00460"></a>00460             searchArray = searchString.Split(<span class="charliteral">&#39; &#39;</span>);
<a name="l00461"></a>00461 
<a name="l00462"></a>00462             <span class="comment">// We will search for movies in the following way:</span>
<a name="l00463"></a>00463             <span class="comment">// Search String: &quot;Back to the Future CD1 XVID&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;, arr[4]=&quot;CD1&quot;, arr[5]=&quot;XVID&quot;.</span>
<a name="l00464"></a>00464             <span class="comment">// Search 1: &quot;Back to the Future CD1 XVID&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;, arr[4]=&quot;CD1&quot;, arr[5]=&quot;XVID&quot;.</span>
<a name="l00465"></a>00465             <span class="comment">// Search 2: &quot;Back to the Future CD1&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;, arr[4]=&quot;CD1&quot;.</span>
<a name="l00466"></a>00466             <span class="comment">// Search 3: &quot;Back to the Future&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;, arr[3]=&quot;Future&quot;.</span>
<a name="l00467"></a>00467             <span class="comment">// Search 4: &quot;Back to the&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;, arr[2]=&quot;the&quot;.</span>
<a name="l00468"></a>00468             <span class="comment">// Search 5: &quot;Back to&quot; =&gt; arr[0]=&quot;Back&quot;, arr[1]=&quot;to&quot;.</span>
<a name="l00469"></a>00469             <span class="comment">// Search 6: &quot;Back&quot; =&gt; arr[0]=&quot;Back&quot;.</span>
<a name="l00470"></a>00470             <span class="keywordflow">for</span> (<span class="keywordtype">int</span> loopCounter = (searchArray.Length - 1); loopCounter &gt;= 0; loopCounter--)
<a name="l00471"></a>00471             {
<a name="l00472"></a>00472                 <span class="comment">// Search only as long as we haven&#39;t yet found a match.</span>
<a name="l00473"></a>00473                 <span class="comment">// In the above exmples we need max 6 searches, </span>
<a name="l00474"></a>00474                 <span class="comment">// but since we have a match on the 3rd search we only need 3 searches.</span>
<a name="l00475"></a>00475                 <span class="keywordflow">if</span> (!matchFound)
<a name="l00476"></a>00476                 {
<a name="l00477"></a>00477                     <span class="comment">// Main variables.</span>
<a name="l00478"></a>00478                     <span class="keywordtype">int</span>    substringLength = 0;
<a name="l00479"></a>00479                     <span class="keywordtype">string</span> searchSubstring = <span class="stringliteral">@&quot;&quot;</span>;
<a name="l00480"></a>00480 
<a name="l00481"></a>00481                     <span class="comment">// Set the correct substring length of the search string based on which iteration of the loop we are currently in.</span>
<a name="l00482"></a>00482                     <span class="keywordflow">if</span> (loopCounter == (searchArray.Length - 1))
<a name="l00483"></a>00483                     {
<a name="l00484"></a>00484                         substringLength = searchString.Length;
<a name="l00485"></a>00485                     }
<a name="l00486"></a>00486                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (loopCounter == 0)
<a name="l00487"></a>00487                     {
<a name="l00488"></a>00488                         substringLength = searchArray[0].Length;
<a name="l00489"></a>00489                     }
<a name="l00490"></a>00490                     <span class="keywordflow">else</span>
<a name="l00491"></a>00491                     {
<a name="l00492"></a>00492                         substringLength = searchString.LastIndexOf(searchArray[loopCounter + 1]);
<a name="l00493"></a>00493                     }
<a name="l00494"></a>00494 
<a name="l00495"></a>00495                     <span class="comment">// Set the correct search string.</span>
<a name="l00496"></a>00496                     searchSubstring = searchString.Substring(0, substringLength);
<a name="l00497"></a>00497 
<a name="l00498"></a>00498                     <span class="keywordflow">try</span>
<a name="l00499"></a>00499                     {
<a name="l00500"></a>00500                         <span class="keywordflow">if</span> (!String.IsNullOrEmpty(searchSubstring))
<a name="l00501"></a>00501                         {
<a name="l00502"></a>00502                             <span class="comment">// Send an HTTP web request to TheMovieDB.org to search for the specified movie.</span>
<a name="l00503"></a>00503                             httpResponseDataString = Network.DataCommunication.GetHttpWebRequestResponse(<span class="stringliteral">@&quot;http://api.themoviedb.org/2.1/Movie.search/en/xml/&quot;</span> + MovieInfo.apiKey + <span class="stringliteral">@&quot;/&quot;</span> + searchSubstring + <span class="stringliteral">@&quot;&quot;</span>);
<a name="l00504"></a>00504                         }
<a name="l00505"></a>00505                     }
<a name="l00506"></a>00506                     <span class="keywordflow">catch</span> (Exception exception)
<a name="l00507"></a>00507                     {
<a name="l00508"></a>00508                         EventLog.WriteEntry(resourceManager.GetString(<span class="stringliteral">&quot;application_title&quot;</span>),
<a name="l00509"></a>00509                             <span class="stringliteral">@&quot;</span>
<a name="l00510"></a>00510 <span class="stringliteral">                            Class:  MovieInfo</span>
<a name="l00511"></a>00511 <span class="stringliteral">                            Method: GetMovieRawData(&quot;&quot;&quot;</span> + searchString + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00512"></a>00512 <span class="stringliteral">                            Action: DataCommunication.GetHttpWebRequestResponse(&quot;&quot;http://api.themoviedb.org/2.1/Movie.search/en/xml/MovieInfo.apiKey/&quot;</span> + searchSubstring + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00513"></a>00513 <span class="stringliteral">                            httpResponseDataString: &quot;</span> + httpResponseDataString + <span class="stringliteral">@&quot;</span>
<a name="l00514"></a>00514 <span class="stringliteral">                            </span>
<a name="l00515"></a>00515 <span class="stringliteral">                            &quot;</span> + exception.Message
<a name="l00516"></a>00516                             , EventLogEntryType.Error, 123);
<a name="l00517"></a>00517                     }
<a name="l00518"></a>00518 
<a name="l00519"></a>00519                     <span class="comment">// Extract from the result how many movies the search query returned.</span>
<a name="l00520"></a>00520                     <span class="keywordflow">if</span> (!String.IsNullOrEmpty(httpResponseDataString))
<a name="l00521"></a>00521                     {
<a name="l00522"></a>00522                         <span class="keywordtype">string</span> searchResultsPattern = <span class="stringliteral">@&quot;&lt;opensearch:totalResults&gt;(?&lt;searchResults&gt;.+)&lt;/opensearch:totalResults&gt;&quot;</span>;
<a name="l00523"></a>00523                         Match  searchResultsMatch   = Regex.Match(httpResponseDataString, searchResultsPattern);
<a name="l00524"></a>00524                         searchResults               = Regex.Replace(searchResultsMatch.ToString(), searchResultsPattern, <span class="stringliteral">&quot;${searchResults}&quot;</span>);
<a name="l00525"></a>00525                     }
<a name="l00526"></a>00526 
<a name="l00527"></a>00527                     <span class="comment">// Let the iterative loop know that we have found exactly one match so we can break out of the loop.</span>
<a name="l00528"></a>00528                     <span class="keywordflow">if</span> (!String.IsNullOrEmpty(searchResults) &amp;&amp; (searchResults != <span class="stringliteral">@&quot;0&quot;</span>))
<a name="l00529"></a>00529                     {
<a name="l00530"></a>00530                         matchFound = <span class="keyword">true</span>;
<a name="l00531"></a>00531                     }
<a name="l00532"></a>00532                     <span class="keywordflow">else</span>
<a name="l00533"></a>00533                     {
<a name="l00534"></a>00534                         httpResponseDataString = <span class="stringliteral">@&quot;&quot;</span>;
<a name="l00535"></a>00535                         matchFound             = <span class="keyword">false</span>;
<a name="l00536"></a>00536                     }
<a name="l00537"></a>00537                 }
<a name="l00538"></a>00538             }
<a name="l00539"></a>00539 
<a name="l00540"></a>00540             <span class="comment">// Return the Movie details if a movie name was found using the search string.</span>
<a name="l00541"></a>00541             <span class="comment">// Otherwise return a blank string.</span>
<a name="l00542"></a>00542             <span class="keywordflow">return</span> httpResponseDataString;
<a name="l00543"></a>00543         }
<a name="l00544"></a>00544 
<a name="l00550"></a>00550         <span class="keyword">public</span> <span class="keyword">static</span> Dictionary&lt;string, string&gt; GetMovieDetails(<span class="keywordtype">string</span> searchString)
<a name="l00551"></a>00551         {
<a name="l00552"></a>00552             <span class="comment">// Main variables.</span>
<a name="l00553"></a>00553             <span class="keywordtype">string</span> httpResponseDataString = <span class="stringliteral">@&quot;&quot;</span>;
<a name="l00554"></a>00554             
<a name="l00555"></a>00555             <span class="comment">// Reserve a dictionary to contain all the movie details to return.</span>
<a name="l00556"></a>00556             Dictionary&lt;string, string&gt; movieDetails = <span class="keyword">new</span> Dictionary&lt;string, string&gt;() { };
<a name="l00557"></a>00557             
<a name="l00558"></a>00558             <span class="comment">// Replace dots and underscores with spaces.</span>
<a name="l00559"></a>00559             searchString = MediaInfo.RemoveSpecialCharacters(searchString);
<a name="l00560"></a>00560 
<a name="l00561"></a>00561             <span class="keywordflow">try</span> 
<a name="l00562"></a>00562             {
<a name="l00563"></a>00563                 <span class="comment">// Search for the movie details.</span>
<a name="l00564"></a>00564                 <span class="keywordflow">if</span> (!String.IsNullOrEmpty(searchString))
<a name="l00565"></a>00565                 {
<a name="l00566"></a>00566                     httpResponseDataString = MovieInfo.GetMovieRawData(searchString);
<a name="l00567"></a>00567                 }
<a name="l00568"></a>00568             }
<a name="l00569"></a>00569             <span class="keywordflow">catch</span> (Exception exception)
<a name="l00570"></a>00570             {
<a name="l00571"></a>00571                 EventLog.WriteEntry(resourceManager.GetString(<span class="stringliteral">&quot;application_title&quot;</span>),
<a name="l00572"></a>00572                     <span class="stringliteral">@&quot;</span>
<a name="l00573"></a>00573 <span class="stringliteral">                    Class:  MovieInfo</span>
<a name="l00574"></a>00574 <span class="stringliteral">                    Method: GetMovieDetails(&quot;&quot;&quot;</span> + searchString + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00575"></a>00575 <span class="stringliteral">                    Action: MovieInfo.GetMovieRawData(&quot;&quot;&quot;</span> + searchString + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00576"></a>00576 <span class="stringliteral">                    </span>
<a name="l00577"></a>00577 <span class="stringliteral">                    &quot;</span> + exception.Message
<a name="l00578"></a>00578                     , EventLogEntryType.Error, 123);
<a name="l00579"></a>00579             }
<a name="l00580"></a>00580             
<a name="l00581"></a>00581             <span class="comment">// Return movie details if they were found.</span>
<a name="l00582"></a>00582             <span class="keywordflow">if</span> (!String.IsNullOrEmpty(httpResponseDataString))
<a name="l00583"></a>00583             {
<a name="l00584"></a>00584                 <span class="keywordflow">try</span>
<a name="l00585"></a>00585                 {
<a name="l00586"></a>00586                     <span class="keywordflow">if</span> (!String.IsNullOrEmpty(httpResponseDataString))
<a name="l00587"></a>00587                     {
<a name="l00588"></a>00588                         movieDetails = MovieInfo.GetMovieDetailsInternal(httpResponseDataString);
<a name="l00589"></a>00589                     }
<a name="l00590"></a>00590                 }
<a name="l00591"></a>00591                 <span class="keywordflow">catch</span> (Exception exception)
<a name="l00592"></a>00592                 {
<a name="l00593"></a>00593                     EventLog.WriteEntry(resourceManager.GetString(<span class="stringliteral">&quot;application_title&quot;</span>),
<a name="l00594"></a>00594                         <span class="stringliteral">@&quot;</span>
<a name="l00595"></a>00595 <span class="stringliteral">                        Class:  MovieInfo</span>
<a name="l00596"></a>00596 <span class="stringliteral">                        Method: GetMovieDetails(&quot;&quot;&quot;</span> + searchString + <span class="stringliteral">@&quot;&quot;&quot;)</span>
<a name="l00597"></a>00597 <span class="stringliteral">                        Action: MovieInfo.GetMovieDetailsInternal(&quot;&quot;&lt;httpResponseDataString&gt;&quot;&quot;)</span>
<a name="l00598"></a>00598 <span class="stringliteral">                        </span>
<a name="l00599"></a>00599 <span class="stringliteral">                        &quot;</span> + exception.Message
<a name="l00600"></a>00600                         , EventLogEntryType.Error, 123);
<a name="l00601"></a>00601                 }
<a name="l00602"></a>00602             }
<a name="l00603"></a>00603 
<a name="l00604"></a>00604             <span class="comment">// Return the movie details.</span>
<a name="l00605"></a>00605             <span class="keywordflow">return</span> movieDetails;
<a name="l00606"></a>00606         }
<a name="l00607"></a>00607 
<a name="l00608"></a>00608     }
<a name="l00609"></a>00609 }
</pre></div></div><!-- contents -->
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="a00021.html">MovieInfo.cs</a>      </li>

    <li class="footer">Generated on Thu Jan 10 2013 07:05:20 for Voya Media by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.0 </li>
   </ul>
 </div>


</body>
</html>
